package com.lottery.material.utils;

import java.util.Collection;
import java.util.Map;
import java.util.Objects;

/**
 * Description：Java对象是否为空判断工具类
 * Created by 朱正磊 on 2019-03-22 13:36
 */
@SuppressWarnings("ALL")
public class EmptyUtil {

    /**
     * description：私有化构造函数不允许被实例化
     * user 朱正磊
     * time 2019-03-22 13:37
     */
    private EmptyUtil() {}

    /**
     * description：判断对象是否为null
     * user 朱正磊
     * time 2019-03-22 13:43
     * @param object 待判断对象
     * @return 如果对象为null返回true，否则返回false
     */
    public static boolean isNull(Object object) {
        return object == null;
    }

    /**
     * description：判断对象是否不为null
     * user 朱正磊
     * time 2019-03-22 13:43
     * @param object 待判断对象
     * @return 如果对象不为null返回true，否则返回false
     */
    public static boolean isNotNull(Object object) {
        return object != null;
    }

    /**
     * description：判断集合是否为空
     * user 朱正磊
     * time 2019-03-22 13:38
     * @param collection 待判断集合
     * @return 如果集合为null或者集合元素个数为0，那么返回true，否则返回false
     */
    public static boolean isEmpty(Collection<?> collection) {
        return isNull(collection) || collection.size() < 1;//collection.size()==0和collection.isEmpty()等价
    }

    /**
     * description：判断Map是否为空
     * user 朱正磊
     * time 2019-03-22 13:39
     * @param map 待判断Map
     * @return 如果Map为null或者Map键值对个数为0，那么返回true，否则返回false
     */
    public static boolean isEmpty(Map<?, ?> map) {
        return isNull(map) || map.size() < 1;//map.size()==0和map.isEmpty()等价
    }

    /**
     * description：判断对象是否为空
     * user 朱正磊
     * time 2019-03-22 13:40
     * @param object 待判断对象
     * @return 如果对象为空返回true，否则返回false
     */
    public static boolean isEmpty(Object object) {
        if (object instanceof Collection) {
            return isEmpty((Collection<?>) object);
        } else if (object instanceof Map) {
            return isEmpty((Map<?, ?>) object);
        }
        return isNull(object) || Objects.equals("", object.toString().trim());
    }

    /**
     * description：判断数组是否为空
     * user 朱正磊
     * time 2019-03-22 13:45
     * @param object 待判断数组
     * @return 如果数组为null或者数组元素个数为0，那么返回true，否则返回false
     */
    public static boolean isEmpty(Object[] object) {
        return isNull(object) || object.length < 1;
    }

    /**
     * description：判断字符串是否为空
     * user 朱正磊
     * time 2019-03-22 13:46
     * @param text 待判断字符串
     * @return 如果字符串为null或者字符串长度为0，那么返回true，否则返回false
     */
    public static boolean isEmpty(String text) {
        return isNull(text) || text.trim().length() < 1;
    }

    /**
     * description：判断集合是否不为空
     * user 朱正磊
     * time 2019-03-22 13:47
     * @param collection 待判断集合
     * @return 如果集合不为null并且集合元素个数不为0，那么返回true，否则返回false
     */
    public static boolean isNotEmpty(Collection<?> collection) {
        return !isEmpty(collection);
    }

    /**
     * description：判断Map是否不为空
     * user 朱正磊
     * time 2019-03-22 13:47
     * @param map 待判断Map
     * @return 如果Map不为null并且Map键值对个数不为0，那么返回true，否则返回false
     */
    public static boolean isNotEmpty(Map<?, ?> map) {
        return !isEmpty(map);
    }

    /**
     * description：判断对象是否不为空
     * user 朱正磊
     * time 2019-03-22 13:47
     * @param object 待判断对象
     * @return 如果对象不为空返回true，否则返回false
     */
    public static boolean isNotEmpty(Object object) {
        return !isEmpty(object);
    }

    /**
     * description：判断数组是否不为空
     * user 朱正磊
     * time 2019-03-22 13:48
     * @param object 待判断数组
     * @return 如果数组不为null并且数组元素个数不为0，那么返回true，否则返回false
     */
    public static boolean isNotEmpty(Object[] object) {
        return !isEmpty(object);
    }

    /**
     * description：判断字符串是否不为空
     * user 朱正磊
     * time 2019-03-22 13:48
     * @param text 待判断字符串
     * @return 如果字符串不为null并且字符串长度不为0，那么返回true，否则返回false
     */
    public static boolean isNotEmpty(String text) {
        return !isEmpty(text);
    }

}
